import { request } from '@/http'
import type { ApiResponse } from '@/http'

/**
 * 练习分类数据结构接口
 * 根据学习主题自动生成的练习分类
 */
export interface PracticeCategory {
  id: string // 练习分类唯一标识
  subjectId: string // 对应的学习主题ID
  name: string // 练习分类名称
  description: string // 练习分类描述
  icon: string // 练习分类图标
  level: 'primary' | 'junior' | 'senior' | 'university' // 学段
  difficulty: 'easy' | 'medium' | 'hard' // 难度等级
  questionCount: number // 题目总数
  topics: PracticeTopic[] // 练习知识点列表
  estimatedTime: number // 预计练习时间（分钟）
  createdAt: string // 创建时间
  updatedAt: string // 更新时间
}

/**
 * 练习知识点数据结构接口
 */
export interface PracticeTopic {
  id: string // 知识点唯一标识
  name: string // 知识点名称
  description: string // 知识点描述
  questionCount: number // 该知识点的题目数量
}

/**
 * 练习题数据结构接口
 */
export interface PracticeQuestion {
  id: string // 题目唯一标识
  type: string // 题目类型
  topic: string // 所属知识点
  difficulty: 'easy' | 'medium' | 'hard' // 难度等级
  question: string // 题目内容
  options: string[] // 选项列表
  correctAnswer: string // 正确答案
  explanation: string // 题目解释
  createdAt: string // 创建时间
}

/**
 * 练习题列表响应数据结构
 */
export interface PracticeQuestionsData {
  list: PracticeQuestion[]
  total: number
  category: {
    id: string
    name: string
    subjectId: string
  }
}

/**
 * 获取练习分类列表
 * 支持按学段、主题等条件筛选
 * @param params 筛选参数
 * @param params.level 学段筛选 (primary/junior/senior/university)
 * @param params.subject 特定主题筛选
 * @returns Promise<ApiResponse<PracticeCategory[]>> 练习分类列表响应
 */
export function getPracticeCategories(params?: { level?: string; subject?: string }) {
  return request<ApiResponse<PracticeCategory[]>>({
    url: '/practice/categories',
    method: 'GET',
    params,
  })
}

/**
 * 根据ID获取练习分类详情
 * @param categoryId 练习分类ID
 * @returns Promise<ApiResponse<PracticeCategory>> 练习分类详情响应
 */
export function getPracticeCategoryById(categoryId: string) {
  return request<ApiResponse<PracticeCategory>>({
    url: `/practice/categories/${categoryId}`,
    method: 'GET',
  })
}

/**
 * 获取练习分类的题目列表
 * @param categoryId 练习分类ID
 * @param params 筛选参数
 * @param params.topic 知识点筛选
 * @param params.difficulty 难度筛选
 * @param params.count 题目数量
 * @returns Promise<ApiResponse<PracticeQuestionsData>> 练习题列表响应
 */
export function getPracticeQuestions(
  categoryId: string,
  params?: { topic?: string; difficulty?: string; count?: number },
) {
  return request<ApiResponse<PracticeQuestionsData>>({
    url: `/practice/categories/${categoryId}/questions`,
    method: 'GET',
    params,
  })
}

/**
 * 根据学段获取练习分类
 * @param level 学段ID (primary/junior/senior/university)
 * @returns Promise<ApiResponse<PracticeCategory[]>> 练习分类列表响应
 */
export function getPracticeCategoriesByLevel(level: string) {
  return request<ApiResponse<PracticeCategory[]>>({
    url: '/practice/categories',
    method: 'GET',
    params: { level },
  })
}

/**
 * 根据学习主题获取对应的练习分类
 * @param subjectId 学习主题ID
 * @returns Promise<ApiResponse<PracticeCategory[]>> 练习分类列表响应
 */
export function getPracticeCategoriesBySubject(subjectId: string) {
  return request<ApiResponse<PracticeCategory[]>>({
    url: '/practice/categories',
    method: 'GET',
    params: { subject: subjectId },
  })
}
